﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.MakeIT.Laundy.Agromotor.Site.Entidades;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Negocios;
using MakeIT.Framework.Util;
using System.Net.Mail;
using System.Net;

namespace MakeIT.MakeIT.Laundy.Agromotor.Site.Apresentacao
{
    public partial class ProdutosBusca : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            setCotacaoAviso();
            if (!IsPostBack)
            {
                this.Session["fromView"] = 0;

                if (this.Session["idPeca"] != null)
                {
                    LinkButton lbTemp = new LinkButton();
                    lbTemp.CommandArgument = this.Session["idPeca"].ToString();
                    this.Session["idPeca"] = null;
                    lnkDetalhes_Click(lbTemp, null);
                }
            }
        }


        protected void btnBusca_Click(object sender, EventArgs e)
        {
            List<PecaVO> pecaVOs = null;

            if (!string.IsNullOrEmpty(this.txtBuscaCodigo.Text.Trim()))
            {
                pecaVOs = AgromotorsiteDAO.getPecas(null, this.txtBuscaNome.Text.Trim(), null, this.txtBuscaCodigo.Text.Trim(), null, null, null, true);
            }
            
            else if (!string.IsNullOrEmpty(this.txtBuscaNome.Text.Trim()))
            {
                List<CategoriaVO> cVOs = AgromotorsiteDAO.getCategorias(null, null, this.txtBuscaNome.Text.Trim());
                if (cVOs == null || cVOs.Count == 0)
                {
                    cVOs = AgromotorsiteDAO.getCategorias(null,this.txtBuscaNome.Text.Trim(), null);
                }
                if (cVOs != null && cVOs.Count>0)
                {
                    if (cVOs.Count == 1)
                    {
                        pecaVOs = AgromotorsiteDAO.getPecas(null, null, cVOs[0].idCategoria, null, null, null, null, true);
                    }
                    else
                    {
                        this.MultiView1.SetActiveView(this.ViewResultadoBuscaCategoria);
                        this.RepeaterCategorias.DataSource = cVOs;
                        this.RepeaterCategorias.DataBind();
                        return;
                    }
                }
            }

            this.MultiView1.SetActiveView(this.ViewResultadoBusca);
            this.lblQtdBusca.Text = "0";
            if (pecaVOs != null)
                this.lblQtdBusca.Text = pecaVOs.Count.ToString();

            this.grvResultadoBusca.DataSource = pecaVOs;
            this.grvResultadoBusca.DataBind();

            this.Session["grvResultadoBusca"] = pecaVOs;
            this.Session["fromView"] = 1;
        }
        protected void btCategoria_Click(object sender, EventArgs e)
        {
            int idCategoria = int.Parse(((Button)sender).CommandArgument);
            List<PecaVO> pecaVOs = AgromotorsiteDAO.getPecas(null, null, idCategoria, null, null, null, null, true);

            this.MultiView1.SetActiveView(this.ViewResultadoBusca);
            this.lblQtdBusca.Text = "0";
            if (pecaVOs != null)
                this.lblQtdBusca.Text = pecaVOs.Count.ToString();

            this.grvResultadoBusca.DataSource = pecaVOs;
            this.grvResultadoBusca.DataBind();

            this.Session["grvResultadoBusca"] = pecaVOs;
            this.Session["fromView"] = 1;
        }


        protected void grvResultadoBusca_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grvResultadoBusca.PageIndex = e.NewPageIndex;
            grvResultadoBusca.DataSource = (List<PecaVO>)this.Session["grvResultadoBusca"];
            grvResultadoBusca.DataBind();
        }
        protected void btNovaPesquisa_Click(object sender, EventArgs e)
        {
            this.MultiView1.SetActiveView(this.ViewBusca);
            this.Session["fromView"] = 0;
        }

        protected void lnkDetalhes_Click(object sender, EventArgs e)
        {
            this.MultiView1.SetActiveView(this.ViewDetalhePeca);

            int idPeca = int.Parse(((LinkButton)sender).CommandArgument);
            PecaVO pecaVO = AgromotorsiteDAO.getPeca(idPeca);

            this.imgPeca.ImageUrl = "~/DownPecaImagem.aspx?idPeca=" + idPeca.ToString();
            this.lblIdPeca.Text = idPeca.ToString();
            this.lblPeca.Text = pecaVO.peca;
            this.hlLojaVirtual.Visible = pecaVO.loja.Value;
            this.lbOrcamento.Visible = pecaVO.orcamento.Value;
            this.lbOrcamento.CommandArgument = pecaVO.idPeca.ToString();

            this.Session["fromView"] = 2;
        }
        protected void btVoltarResultadoBusca_Click(object sdenre, EventArgs e)
        {
            this.MultiView1.SetActiveView(this.ViewResultadoBusca);
            this.Session["fromView"] = 1;
        }

        protected List<PecaVO> setCotacaoAviso()
        {
            return setCotacaoAviso((List<PecaVO>)this.Session["orcamento"]);
        }
        protected List<PecaVO> setCotacaoAviso(List<PecaVO> pecaVOs)
        {
            if (pecaVOs != null && pecaVOs.Count > 0)
            {
                this.lblAvisoCotacao.Text = "Existe" + (pecaVOs.Count > 1 ? "m " : " ") + pecaVOs.Count + " íte" + (pecaVOs.Count > 1 ? "m" : "ns") + " em sua cota&ccedil;&atilde;o";
                this.lblAvisoCotacao.Visible = true;
                this.btFinalizarCotacao.Visible = true;
            }
            else
            {
                this.lblAvisoCotacao.Visible = false;
                this.btFinalizarCotacao.Visible = false;
            }
            return pecaVOs;
        }
        protected void lbOrcamento_Click(object sender, EventArgs e)
        {
            List<PecaVO> pecaVOs = setCotacaoAviso();
            if (pecaVOs == null)
                pecaVOs = new List<PecaVO>();

            int idPeca = int.Parse(((LinkButton)sender).CommandArgument);
            PecaVO pecaVO = AgromotorsiteDAO.getPeca(idPeca);
            if (pecaVOs.Find(p => p.idPeca == idPeca) == null)
            {
                pecaVO.qtdCotacao = 1;
                pecaVOs.Add(pecaVO);
                this.Session["orcamento"] = pecaVOs;
                setCotacaoAviso(pecaVOs);
            }

            Util.ExibeAlert(this.Page, "Peça incluída na cotação. (Não se esqueça de finalizar a cotação, obrigado)");
        }

        protected void btFinalizarCotacao_Click(object sender, EventArgs e)
        {
            setCotacaoAviso(null);
            this.MultiView1.SetActiveView(this.ViewCotacao);

            List<PecaVO> pecaVOs = (List<PecaVO>)this.Session["orcamento"];
            this.GridViewItens.DataSource = pecaVOs;
            this.GridViewItens.DataBind();
        }
        protected void imgbRemove_Click(object sender, ImageClickEventArgs e)
        {
            List<PecaVO> pecaVOs = (List<PecaVO>)this.Session["orcamento"];

            int idPeca = int.Parse(((ImageButton)sender).CommandArgument);
            pecaVOs.Remove(pecaVOs.Find(p => p.idPeca == idPeca));
            setCotacaoAviso(pecaVOs);

            // apaga pedido se não sobrou mais nenhum item no carrinho
            if (pecaVOs == null || pecaVOs.Count == 0)
            {
                this.MultiView1.SetActiveView(this.ViewBusca);
                Util.ExibeAlert(this.Page, "Todos os ítens desta cotação foram excluídos");
                this.Session["orcamento"] = null;
                return;
            }
            this.Session["orcamento"] = pecaVOs;
            this.GridViewItens.DataSource = pecaVOs;
            this.GridViewItens.DataBind();
        }
        protected void btEnviaEmail_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(this.txtCadEmail.Text) && this.txtCadFone.Text.Equals("(__)____-____"))
                {
                    Util.ExibeAlert(this.Page, "Favor informar Email ou Fone, obrigado.");
                    return;
                }
                string mensagemBody = "Um usu&aacute;rio solicitou cota&ccedil;&atilde;o pelo site www.agromotor.com.br:<br><br><br>" +
                              "<b>CONTATO</b>:<br>" +
                              "Nome: " + this.txtCadNome.Text + "<br>" +
                              "email: " + this.txtCadEmail.Text + "<br>" +
                              "Fone: " + this.txtCadFone.Text + "<hr><br>" +
                              "<b>Itens da cota&ccedil;&atilde;o</b>:<br>" +
                              "<table border=\"1\"><tr><td>Item #</td><td>C&oacute;digo</td><td>Pe&ccedil;a</td><td>Quantidade</td></tr>";

                foreach (GridViewRow gvr in GridViewItens.Rows)
                {
                    mensagemBody +=
                        "<tr><td>" + ((Label)gvr.FindControl("lblItem")).Text + "</td><td>" +
                        gvr.Cells[1].Text + "</td><td>" +
                        gvr.Cells[2].Text + "</td><td>" +
                        ((TextBox)gvr.FindControl("tbQtd")).Text + "</td></tr>";
                }
                mensagemBody += "</table><br>" +
                                "*Este email foi enviado automaticamente pelo site em " + DateTime.Now.ToString();

                MailMessage oEmail = new MailMessage();
                MailAddress sDe = new MailAddress(this.txtCadEmail.Text /*AgromotorsiteDAO.getParametro(null, "Email.Administrador").valor*/);

                oEmail.To.Add(AgromotorsiteDAO.getParametro(null, "Orcamento.Email").valor);
                oEmail.Sender = new MailAddress(AgromotorsiteDAO.getParametro(null, "Email.Administrador").valor);
                oEmail.From = new MailAddress(this.txtCadEmail.Text);
                oEmail.Priority = MailPriority.Normal;
                oEmail.IsBodyHtml = true;
                oEmail.Subject = "Solicitação de Cotação - Site www.agromotor.com.br";
                oEmail.Body = mensagemBody;

                SmtpClient oEnviar = new SmtpClient();
                oEnviar.Host = AgromotorsiteDAO.getParametro(null, "Email.Host.SMTP").valor;
                oEnviar.Credentials = new NetworkCredential(
                                                AgromotorsiteDAO.getParametro(null, "Email.Administrador").valor,
                                                AgromotorsiteDAO.getParametro(null, "Email.Administrador.Pass").valor);
                oEnviar.Send(oEmail);
                oEmail.Dispose();

                this.Session["orcamento"] = null;
                this.Session["fromView"] = null;
                setCotacaoAviso(null);
                this.MultiView1.SetActiveView(this.ViewBusca);

                Util.ExibeAlert(this.Page, "Cotação enviada! Aguarde contato, obrigado!");
            }
            catch (Exception ex)
            {
                Util.ExibeAlert(this.Page, "Cotação não enviada! Verifique se seu email está digitado corretamente.");
            }
        }
        protected void btVoltar_Click(object sender, EventArgs e)
        {
            int fromView = 0;
            if (this.Session["fromView"] != null)
                fromView = int.Parse(this.Session["fromView"].ToString());

            this.MultiView1.ActiveViewIndex = fromView;
        }
    }
}
